//
//  WBBaseViewController.swift
//  小贝微博
//
//  Created by 汪波 on 2017/4/12.
//  Copyright © 2017年 Kevin. All rights reserved.
//

import UIKit
//面试题:OC中支持多继承吗?如果不支持如何替代?答案:就是使用协议替代!
//Swift的写法更类似于多继承!
//class WBBaseViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
//Swift中,利用extension可以把'函数'按照功能分类管理,便于阅读和维护
//注意::
//1.extension中不能有属性
//2.extension中不能重写父类方法!重写父类方法是子类里面干的事情,extension是类的扩展

///所有主控制器的基类控制器
class WBBaseViewController: UIViewController{
    ///表格视图 - 如果用户没有登录,就不创建(所以不能用懒加载)
    var tableView: UITableView?
    /// 自定义导航条
    lazy var navigationBar = UINavigationBar(frame:CGRect(x: 0, y: 0, width: UIScreen.cz_screenWidth(), height: 64))
    
    /// 自定义导航条目 - 以后设置导航栏内容统一使用navItem
    lazy var navItem = UINavigationItem()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        setupUI()
        loadData()
    }
    
    /// 重写title的didSet方法
    override var title: String?{
        didSet{
            navItem.title = title
        }
    }
    
    ///加载数据 - 具体实现由子类完成
    func loadData() {
        
    }
}

// MARK: - 设置界面(option+command+/)
extension WBBaseViewController {
    //为了重写,我们这里不私有fileprivate func setupUI
    func setupUI(){
        view.backgroundColor = UIColor.cz_random()
        //取消自动缩进 - 如果隐藏了导航栏,会缩进20个点.导航栏高度64,如果不写会多出20点,一般开发中这个属性都需要设
        automaticallyAdjustsScrollViewInsets = false
        
        setupNavigationBar()
        setupTableView()
        
    }
    
    ///设置表格视图
    fileprivate func setupTableView() {
        tableView = UITableView(frame: view.bounds, style: .plain)
        
        //view.addSubview(tabelView!)不能用,用了导航条没了,只能修改通过设置界面的方法调换修改,但是这样不利以后开发,所以可以用以下方法
        //让tabelView在navigationBar下面的方法
        view.insertSubview(tableView!, belowSubview: navigationBar)
        
        //设置数据源和代理 -> 目的:子类直接实现数据源方法(OC里面不遵守协议是警告,Swift里面是错误)
        tableView?.dataSource = self
        tableView?.delegate = self
        
        //把整个内容调整下来,设置内容缩进
        //navigationBar.bounds.size.height = navigationBar.bounds.height 在swift里面可以简化
//        tableView?.contentInset = UIEdgeInsetsMake(navigationBar.bounds.height, 0, tabBarController?.tabBar.bounds.height ?? 49, 0)
        //两种方法都可以
        tableView?.contentInset = UIEdgeInsets(top: navigationBar.bounds.height,
                                               left: 0,
                                               bottom: tabBarController?.tabBar.bounds.height ?? 49,
                                               right: 0)
    }
    ///设置导航条
    fileprivate func setupNavigationBar() {
        //添加导航条
        view.addSubview(navigationBar)
        //将item设置给Bar
        navigationBar.items = [navItem]
        //设置navBar的渲染颜色
        navigationBar.barTintColor = UIColor.cz_color(withHex: 0xF6F6F6)
        //设置navBar的barbutton文字渲染颜色
        navigationBar.tintColor = UIColor.orange
        //设置navBar字体颜色
        navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.darkGray]
    }
}


// MARK: - UITableViewDelegate, UITableViewDataSource
extension WBBaseViewController: UITableViewDelegate, UITableViewDataSource {
    //基类不负责实现,返回0
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    //基类只是准备方法,子类负责具体实现
    //子类的数据源方法不需要super
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //必选的,返回tableViewCell
        //return只是保证没有语法错误
        return UITableViewCell()
    }
}
